"""
Created on 2022-04-09
@author:刘飞
@description:神经网络识别手写图片集--读取图片数据，将他们的数值进行转换和缩放，使得它们的范围变成0.01到1.0
"""
from pprint import pprint
# helper从PNG图像文件加载数据
import scipy.misc
# Glob帮助使用模式选择多个文件
import glob
import numpy
# 用于绘制数组的库
import matplotlib.pyplot
import imageio

# 我们自己的图像测试数据集
our_own_dataset = []

for image_file_name in glob.glob('my_own_images/2828_my_own_?.png'):
    pprint(f"正在加载的图片loading ... {image_file_name}")
    # 使用文件名设置正确的标签
    label = int(image_file_name[-5:-4])
    # 将PNG文件中的图像数据加载到数组中
    img_array = imageio.imread(image_file_name)
    # 改变图片形状为28*28
    img_array = numpy.resize(img_array, (28, 28))
    # 重塑从28x28到列表784个值，反转值
    # 从255.0中减去了数组的值。这样做的原因是，常规而言，0指的是黑色，255指的是白色，但是，MNIST数据集使用相反的方式表示，因此不得不将值逆转过来以匹配MNIST数据。
    img_data = 255.0 - img_array.reshape(784)
    # 然后将数据范围从0.01到1.0
    img_data = (img_data / 255.0 * 0.99) + 0.01
    pprint(f'数组中的最小值：{numpy.min(img_data)}')
    pprint(f'数组中的最大值：{numpy.max(img_data)}')
    # 添加标签和图像数据到测试数据集
    record = numpy.append(label, img_data)
    # pprint(record)
    our_own_dataset.append(record)

matplotlib.pyplot.imshow(our_own_dataset[3][1:].reshape(28, 28), cmap='Greys', interpolation='None')
matplotlib.pyplot.show()
pprint(our_own_dataset[0])
